// Database.java // uses struts connection pooling import java.sql.*; import java.util.*; import org.apache.struts.util.*; // import javax.sql.*; import DbRowSet; public class Database { private static GenericDataSource dataSource = null; static { try { dataSource = new GenericDataSource(); dataSource.setAutoCommit(true); dataSource.setDriverClass("org.postgresql.Driver"); dataSource.setMaxCount(4); dataSource.setMinCount(1); dataSource.setUrl("jdbc:postgresql://localhost/test"); dataSource.setUser("dwarf"); dataSource.open(); }catch(Exception e){ System.out.println("ERROR in Database init"); } } static public DbRowSet RunSql(String sql) throws java.sql.SQLException { return RunSql(sql,null); } static public DbRowSet RunSql(String sql, List params) throws java.sql.SQLException { Connection conn = null; PreparedStatement stmt = null; ResultSet rs = null; try{ conn = dataSource.getConnection(); stmt = conn.prepareStatement(sql); stmt.clearParameters(); if(params != null){ int index = 1; for(Iterator i = params.iterator(); i.hasNext(); ) stmt.setObject(index++,i.next()); } if(!stmt.execute()) return null; rs = stmt.getResultSet(); ResultSetMetaData rsmd = rs.getMetaData(); int cols = rsmd.getColumnCount(); java.util.List res = new java.util.LinkedList(); while(rs.next()){ java.util.Map col = new java.util.HashMap(); for(int i = 1; i <= cols; i++){ col.put(rsmd.getColumnLabel(i),rs.getObject(i)); } res.add(col); } rs.close(); stmt.close(); return new DbRowSet(res); }finally{ if(conn != null) conn.close(); } } }